package my.xh.excel.core;

import lombok.Data;
import my.xh.excel.annotation.CellConf;
import my.xh.excel.annotation.CellFont;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * @Description:  excel导出模板
 * @auther: xh
 * @date: 2019/7/27 16:38
 */
@Data
public abstract class TemplateModel<T> {
    /**
     * @Description: 主标题。
     * 如果需要显示主标题，调setMAIN_TITLE()方法，给它赋值主标题的内容。
     * 如果需要自定义主标题的样式，在子类重新定义一个MAIN_TITLE字段，在上面加上@CellConf注解来配置
     * @auther: xh
     * @date: 2019/8/4 6:00
     */
    @CellConf(font = @CellFont(height = 25), alignment = "CENTER")
    private String MAIN_TITLE;
    /**
     * @Description: 导出文件名 如果需要自定义主标题时，调setEXPORT_FILE_NAME()方法，给它赋值导出文件名。
     * @auther: xh
     * @date: 2019/8/4 6:03
     */
    private String EXPORT_FILE_NAME;
    /**
     * @Description: 是否自动列宽 如果需要关闭自动列宽，调setAUTO_SIZE_COLUMN()方法，给它赋值false。
     * @auther: xh
     * @date: 2019/8/4 6:03
     */
    private boolean IS_AUTO_SIZE_COLUMN = true;//是否自动换行
    /**
     * @Author xh
     * @Description 是否隔行变色 如果需要关闭隔行变色，调setINTERLACED_DISCOLORATION()方法，给它赋值false。
     * @Date 15:55 2019/7/29
     **/
    private boolean IS_INTERLACED_DISCOLORATION =true;
    /**
     * @Description: 判断支持数据源的类型
     * @auther: xh
     * @param: []
     * @return: boolean
     * @date: 2019/7/27 16:38
     */
    public boolean isSupport(Class clazz) {
        try {
            Class<T> aClass = this.getSupportClass();

            return aClass == null || aClass.isAssignableFrom(clazz);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public Class<T> getSupportClass() {
        ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();
        Type[] actualTypeArguments = genericSuperclass.getActualTypeArguments();
        Class<T> aClass = (Class<T>) actualTypeArguments[0];
        return aClass;
    }


}
